package cyvra;
import java.sql.*;
import java.util.logging.*;
import javax.swing.*;

/**
 *
 * @author CARDENASVAR
 */
public class frmUsuarios extends javax.swing.JDialog {
    
     // Declaro variable de Conexion
    clsConnection oConn = new clsConnection();
    
    // Variable para las funciones propias
    clsFunciones  oFunc = new clsFunciones();
    
    // Eumeraciones para las operaciones
    enum eOperaciones { Insert, Delete, Update};
    
    // Declaro la variable de la operación
    eOperaciones Operacion;

    /**
     * Creates new form frmUsuarios
     */
    public frmUsuarios(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
        
         // Centra la Forma
        this.setLocationRelativeTo(null);
        
        // Carga el ListBox con los procesos
        SubProcesosCarga();
        
        // Carga el cboBox con los roles
        SubRoleCarga();
        
        // Carga las Claves
        SubClavesCarga();
        
        // Habilita Datos
        SubHabilitaCaptura(false);
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        pnlClave = new javax.swing.JPanel();
        lblUser = new javax.swing.JLabel();
        txtClave = new javax.swing.JTextField();
        choClaves = new java.awt.Choice();
        jPanel1 = new javax.swing.JPanel();
        lblPassword = new javax.swing.JLabel();
        lblName = new javax.swing.JLabel();
        lblRole = new javax.swing.JLabel();
        lblPassword2 = new javax.swing.JLabel();
        txtName = new javax.swing.JTextField();
        txtRole = new javax.swing.JTextField();
        jScrollPane1 = new javax.swing.JScrollPane();
        lstProcesos = new javax.swing.JList();
        txpPassword = new javax.swing.JPasswordField();
        txpRePassword = new javax.swing.JPasswordField();
        choRoles = new java.awt.Choice();
        pnlOperaciones = new javax.swing.JPanel();
        btnInsertar = new javax.swing.JButton();
        btnModificar = new javax.swing.JButton();
        btnBorrar = new javax.swing.JButton();
        pnlTransacciones = new javax.swing.JPanel();
        btnCancelar = new javax.swing.JButton();
        btnAceptar = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

        pnlClave.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)), "Clave"));

        lblUser.setText("Usuario:");

        choClaves.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                choClavesItemStateChanged(evt);
            }
        });

        javax.swing.GroupLayout pnlClaveLayout = new javax.swing.GroupLayout(pnlClave);
        pnlClave.setLayout(pnlClaveLayout);
        pnlClaveLayout.setHorizontalGroup(
            pnlClaveLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlClaveLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(lblUser)
                .addGap(18, 18, 18)
                .addComponent(txtClave, javax.swing.GroupLayout.PREFERRED_SIZE, 103, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(70, 70, 70)
                .addComponent(choClaves, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGap(19, 19, 19))
        );
        pnlClaveLayout.setVerticalGroup(
            pnlClaveLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlClaveLayout.createSequentialGroup()
                .addGap(25, 25, 25)
                .addGroup(pnlClaveLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(choClaves, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(pnlClaveLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(lblUser)
                        .addComponent(txtClave, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap(26, Short.MAX_VALUE))
        );

        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)), "Detalle"));

        lblPassword.setText("Contraseña:");

        lblName.setText("Nombre:");

        lblRole.setText("Cargo:");

        lblPassword2.setText("Re:");

        lstProcesos.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 255)), "Procesos"));
        lstProcesos.setModel(new javax.swing.AbstractListModel() {
            String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
            public int getSize() { return strings.length; }
            public Object getElementAt(int i) { return strings[i]; }
        });
        jScrollPane1.setViewportView(lstProcesos);

        choRoles.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                choRolesItemStateChanged(evt);
            }
        });

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(lblPassword)
                            .addComponent(lblName)
                            .addComponent(lblRole))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addGroup(jPanel1Layout.createSequentialGroup()
                                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                    .addComponent(txtRole, javax.swing.GroupLayout.DEFAULT_SIZE, 177, Short.MAX_VALUE)
                                    .addComponent(txpPassword))
                                .addGap(18, 18, 18)
                                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                    .addGroup(jPanel1Layout.createSequentialGroup()
                                        .addComponent(lblPassword2)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addComponent(txpRePassword, javax.swing.GroupLayout.PREFERRED_SIZE, 177, javax.swing.GroupLayout.PREFERRED_SIZE))
                                    .addComponent(choRoles, javax.swing.GroupLayout.PREFERRED_SIZE, 184, javax.swing.GroupLayout.PREFERRED_SIZE)))
                            .addComponent(txtName))
                        .addGap(0, 4, Short.MAX_VALUE))
                    .addComponent(jScrollPane1))
                .addContainerGap())
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblPassword)
                    .addComponent(lblPassword2)
                    .addComponent(txpPassword, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(txpRePassword, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addComponent(lblName)
                        .addGap(18, 18, 18)
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(lblRole)
                            .addComponent(txtRole, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addComponent(txtName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(choRoles, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );

        pnlOperaciones.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)), "Operaciones"));

        btnInsertar.setText("Insertar");
        btnInsertar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnInsertarActionPerformed(evt);
            }
        });

        btnModificar.setText("Modificar");
        btnModificar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnModificarActionPerformed(evt);
            }
        });

        btnBorrar.setText("Borrar");
        btnBorrar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnBorrarActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout pnlOperacionesLayout = new javax.swing.GroupLayout(pnlOperaciones);
        pnlOperaciones.setLayout(pnlOperacionesLayout);
        pnlOperacionesLayout.setHorizontalGroup(
            pnlOperacionesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlOperacionesLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(btnInsertar)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(btnModificar)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(btnBorrar)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        pnlOperacionesLayout.setVerticalGroup(
            pnlOperacionesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlOperacionesLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(pnlOperacionesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnInsertar)
                    .addComponent(btnModificar)
                    .addComponent(btnBorrar))
                .addContainerGap(20, Short.MAX_VALUE))
        );

        pnlTransacciones.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)), "Transacción"));

        btnCancelar.setText("Cancelar");
        btnCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCancelarActionPerformed(evt);
            }
        });

        btnAceptar.setText("Aceptar");
        btnAceptar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAceptarActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout pnlTransaccionesLayout = new javax.swing.GroupLayout(pnlTransacciones);
        pnlTransacciones.setLayout(pnlTransaccionesLayout);
        pnlTransaccionesLayout.setHorizontalGroup(
            pnlTransaccionesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlTransaccionesLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(btnCancelar)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 29, Short.MAX_VALUE)
                .addComponent(btnAceptar)
                .addContainerGap())
        );
        pnlTransaccionesLayout.setVerticalGroup(
            pnlTransaccionesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlTransaccionesLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(pnlTransaccionesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnCancelar)
                    .addComponent(btnAceptar))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(pnlOperaciones, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(27, 27, 27)
                        .addComponent(pnlTransacciones, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                        .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(pnlClave, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
                .addContainerGap(29, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(pnlClave, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(pnlOperaciones, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(pnlTransacciones, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void btnInsertarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnInsertarActionPerformed
        // TODO add your handling code here:
          // Valida que haya capturado algo
    // Valida el Usuario
    if (txtClave.getText().length()==0)
    {
        // Despliego el Mensaje
        oFunc.SubSistemaMensaje("Debe Capturar la Clave a Insertar");

        // Coloca el Foco en el Objeto
        txtClave.requestFocus();
        
        
    }
    else
        
        // Valido que el Usuario Exista
        if (FnBoolExisteUsuario())
            // Despliego el Mensaje
            oFunc.SubSistemaMensaje("La Clave a Insertar ya Existe");
        else
        {
            // Inicializa Captura
            SubInicializaCaptura(false);
            
            // Especifica la operacion
            Operacion = eOperaciones.Insert;
            
            // Habilita captura
            SubHabilitaCaptura(true);
            
        }         
            
 
     
    }//GEN-LAST:event_btnInsertarActionPerformed

    private void btnModificarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnModificarActionPerformed
        // TODO add your handling code here:
        // Valida que haya capturado algo
    // Valida el Usuario
    if (txtClave.getText().length()==0)
    {
        // Despliego el Mensaje
        oFunc.SubSistemaMensaje("Debe Capturar la Clave a Modificar");

        // Coloca el Foco en el Objeto
        txtClave.requestFocus();
        
        
    }
    else
        if (! FnBoolExisteUsuario())
            // Despliego el Mensaje
            oFunc.SubSistemaMensaje("La Clave a Modificar No Existe");
        else
        {
            // Especifica la operacion
            Operacion = eOperaciones.Update;
            
            // Hablita la captura
            SubHabilitaCaptura(true);
            
        }         
            
 
    }//GEN-LAST:event_btnModificarActionPerformed

    private void btnBorrarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnBorrarActionPerformed
        // TODO add your handling code here:
          // Valida que haya capturado algo
    // Valida el Usuario
    if (txtClave.getText().length()==0)
    {
        // Despliego el Mensaje
        oFunc.SubSistemaMensaje("Debe Capturar la Clave a Eliminar");

        // Coloca el Foco en el Objeto
        txtClave.requestFocus();
        
        
    }
    else
        if (! FnBoolExisteUsuario())
            // Despliego el Mensaje
            oFunc.SubSistemaMensaje("La Clave a Eliminar No Existe");
        else
        {
            // Especifica la operacion
            Operacion = eOperaciones.Delete;
            
            // Habilita la captura
            SubHabilitaCaptura(true);
            
            // Colocal el Foco en Ok
            btnAceptar.requestFocus();
        }
            
 
    }//GEN-LAST:event_btnBorrarActionPerformed

    private void btnAceptarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAceptarActionPerformed
        // TODO add your handling code here:
         
        // Valida que los datos esté correctos
        if (fnBoolDatosOk())
        {
            //Llama rutina de Transaccion
            if (Operacion == eOperaciones.Update)
                SubUpdateUser();
            else if  (Operacion == eOperaciones.Insert)
                SubInsertUser();
            else 
                SubDeleteUser();
            
            // Inicializa y Habilita Captura
            SubInicializaCaptura(true);
            SubHabilitaCaptura(false);
            SubProcesosCarga();
            SubRoleCarga();
        }
            
      
    }//GEN-LAST:event_btnAceptarActionPerformed

    private void btnCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCancelarActionPerformed
        // TODO add your handling code here:
        SubInicializaCaptura(true);
        SubHabilitaCaptura(false);
        SubProcesosCarga();
       
    }//GEN-LAST:event_btnCancelarActionPerformed

    private void choClavesItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_choClavesItemStateChanged
        // TODO add your handling code here:
        if (! choClaves.getSelectedItem().toString().equals("Seleccione"))
        {
            // Coloca el texto en el Role
            txtClave.setText(choClaves.getSelectedItem().toString());
            
            // Carga de Nuevo los Procesos
            FnBoolExisteUsuario();
            
        }
    }//GEN-LAST:event_choClavesItemStateChanged

    private void choRolesItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_choRolesItemStateChanged
        // TODO add your handling code here:
        if (! choRoles.getSelectedItem().toString().equals("Seleccione"))
        {
            // Coloca el texto en el Role
            txtRole.setText(choRoles.getSelectedItem().toString());
            // Carga de Nuevo los Procesos
            SubCargaRoleProcesos();
        }
    }//GEN-LAST:event_choRolesItemStateChanged

    //carga los procesos existentes en la lista de procesos
    private void SubProcesosCarga()
    {
        //para instruccion SQL
        String sqlStmt;
        String sIdeProceso; // variable para el proceso
        String sNomProceso; // variable para el nombre del proceso
        
        //variable para agregar elementos a la lista
        DefaultListModel itemLista;
        itemLista = new DefaultListModel();
        
        //limpia el control
        lstProcesos.removeAll(); // quita todos los datos que tenga
        
        //prepara variable para realizar la consulta
        sqlStmt = "Select * from tblprocesos";
        
        if (oConn.FnBoolQueryExecute(sqlStmt))
        {
            try
            {
                //verifica resultados 
                while (oConn.setResult.next())
                {
                    //obtiene los datos de la consulta
                    sIdeProceso = oConn.setResult.getString("strProcesoIde");
                    sNomProceso = oConn.setResult.getString("strProcesoNom");
                    
                    //agrega el dato  a la lista
                    itemLista.addElement(sIdeProceso+"-"+sNomProceso);
                }
                
                //agrega el dato a la lista
                lstProcesos.setModel(itemLista);
                
                //cierra resultados
                oConn.setResult.close();
            }
            catch (SQLException ex)
            {
                //JOptionPane.showMessageDialog(rootPane, ex);
                oFunc.SubSistemaMensaje(ex.toString());
                Logger.getLogger(frmProcesos.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
   
    //carga los procesos existentes a la lista
    private void SubRoleCarga()
    {
        //para instruccion SQL
        String sqlStmt;
        String sNomRole;
        
        //limpia el control
        choRoles.removeAll();
        choRoles.addItem("Seleccione...");
        
        //prepara variable para realizar la consulta
        sqlStmt = "Select distinct (strRoleName) from tblroleprocesos";
        
        if (oConn.FnBoolQueryExecute(sqlStmt))
        {
            try
            {
                while (oConn.setResult.next())
                {
                    //obtiene los datos de la consulta
                    sNomRole = oConn.setResult.getString("strRoleName");
                    
                    //agrega el elemento
                    choRoles.addItem(sNomRole); 
                }
                
                //cierra resultados
                oConn.setResult.close();
            }
            catch (SQLException ex)
            {
                oFunc.SubSistemaMensaje(ex.toString());
                Logger.getLogger(frmProcesos.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
    
    private void SubClavesCarga()
    {
        //para instruccion SQL
        String sqlStmt;
        String sClave;
        
        //Limpia el Control
        choClaves.removeAll();
        choClaves.addItem("Seleccione");
        
        //prepara Variable para Cosulta
        sqlStmt = "select strUserIde from tblusers";
        if (oConn.FnBoolQueryExecute(sqlStmt));
        {
            try
            {
                //verifica resultados
                while (oConn.setResult.next())
                {
                    //obtiene los datos de la consulta
                    sClave = oConn.setResult.getString("strUserIde");
                    
                    //agrega el elemento
                    choClaves.addItem(sClave);
                }
                
                //cierra Resultados
                oConn.setResult.close(); 
            }
            catch (SQLException ex)
            {
                oFunc.SubSistemaMensaje(ex.toString());
                Logger.getLogger(frmProcesos.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
    
   // Habilita Captura
    private void SubHabilitaCaptura(boolean bHabilita)
    {
        // Habilita/Deshabilita clave
        txtClave.setEnabled(! bHabilita);
        choClaves.setEnabled (! bHabilita);
        
        // Habilita/Deshabilita detalles
        txpPassword.setEnabled(bHabilita);
        txpRePassword.setEnabled(bHabilita);
        txpRePassword.setEnabled(bHabilita);
        txtName.setEnabled(bHabilita);
        txtRole.setEnabled(bHabilita);
        choRoles.setEnabled(bHabilita);
        lstProcesos.setEnabled(bHabilita);
        
        // Habilita/Desahabilita Operaciones
        btnInsertar.setEnabled(! bHabilita);
        btnModificar.setEnabled(! bHabilita);
        btnBorrar.setEnabled(! bHabilita);
        
        // Habilita/Deshabilita captura
        btnAceptar.setEnabled(bHabilita);
        btnCancelar.setEnabled(bHabilita);    
        
        if (bHabilita)
            // Coloca el Foco
            txpPassword.requestFocus();
    
    } 
    
    // Funcion para buscar un usuario en la BD
    private boolean FnBoolExisteUsuario() 
    {
        // Variable para la consulta
        String sQuery;
        Boolean bResult=false;
        
        // Prepara la consulta
        sQuery ="Select * from tblusers";
        sQuery = sQuery + " Where strUserIde='"+txtClave.getText()+"'";
        
        //Ejecuta la consulta 
        oConn.FnBoolQueryExecute(sQuery);
        
        // Capturo el Error
        try {
            // Verifico que haya habido resultados
            if (oConn.setResult.next())
            {
                // Coloco los datos
                txpPassword.setText(oConn.setResult.getString ("strUserPass"));
                txpRePassword.setText(oConn.setResult.getString ("strUserPass"));
                txtName.setText(oConn.setResult.getString ("strUserName"));
                txtRole.setText(oConn.setResult.getString ("strRoleName"));

                // Cierro los Resultados
                oConn.setResult.close();
                
                // Resultado
                bResult = true;

            }
        } catch (SQLException ex) {
            oFunc.SubSistemaMensaje("FnBoolExisteUsuario:"+ex.getMessage().toString());
        }

        if (bResult)
           SubCargaRoleProcesos();
        
        
        // Retorna el Resultado
        return bResult;
        
    }
    
    private void SubCargaRoleProcesos()
    {
        String sQuery;
        String sElemento;
        String sProceso;
        int iPosicion;
        int [] iSeleccionados;
        iSeleccionados = new int[lstProcesos.getModel().getSize()]; //tamaño del arreglo es 3 elementos

        // Inicializa el Vector de Seleccionados
        for (iPosicion = 0; iPosicion < lstProcesos.getModel().getSize();iPosicion++)
        {   
            // Coloca la posición de -1
            iSeleccionados[iPosicion]= -1;
        }
        
        // Prepara la consulta de los Procesos
        sQuery = "Select * from tblroleprocesos where strRoleName='"+txtRole.getText().toString()+"'";

        // Ejecuta una  Nueva Consulta
        oConn.FnBoolQueryExecute(sQuery);                                

        // Capturo el Error
        try 
        {
            // Verifico que haya habido resultados
            while (oConn.setResult.next())
            {
                // Obtengo el Proceso
                sProceso = oConn.setResult.getString ("strProcesoIde");

                for (iPosicion = 0; iPosicion < lstProcesos.getModel().getSize();iPosicion++)
                {
                    // Obtiene el Elemento de la lista
                    sElemento = lstProcesos.getModel().getElementAt(iPosicion).toString();
                    sElemento = sElemento.substring(0,10);                       
                    System.out.println("Comparando Elemento:" + sElemento +" con:"+sProceso);

                    if (sElemento.contentEquals(sProceso))
                    {
                        //lstProcesos.setSelectedIndex(iPosicion);
                        iSeleccionados[iPosicion]= iPosicion;
                    }
                }

                
            }
            // Asigna el Vector de Seleccionados
            lstProcesos.setSelectedIndices(iSeleccionados);
                
            // Cierro los Resultados
            oConn.setResult.close();                                

        } 
        catch (SQLException ex) 
        {
                oFunc.SubSistemaMensaje("SubGetRoleProcesos:"+ex.getMessage().toString());
        }
    }
    
    
     private void SubInicializaCaptura(boolean bClave)
    {
        // Inicializa los datos de Captura
        if (bClave)
           txtClave.setText(null);
            txpPassword.setText("");
            txpRePassword.setText("");
            txtName.setText("");
            txtRole.setText("");
            choRoles.select(0);
        
        // Carga las Claves
        SubClavesCarga();
        
        // Carga los procesos
        SubProcesosCarga();
        
    }
    
     
    // Procedimiento para realizar Insert
    private void SubInsertUser()
    {
        // TODO add your handling code here:
        String strSqlStmt; // Para el Query
        String sPass;      // Para el Password
        
        
        // Coloca la transacción a true
        oConn.SubAutoCommit(false);
        
        // Quita encriptamiento al password
        sPass = new String(txpPassword.getPassword());
    
    
        // Prepara el Query
        strSqlStmt  = " Insert into tblusers (strUserIde,strUserPass,strUserName,strRoleName)";
        strSqlStmt += " Values ('"+txtClave.getText().toString()+"',";
        strSqlStmt += " '"+sPass+"','"+txtName.getText().toString()+"',";
        strSqlStmt += " '"+txtRole.getText().toString()+"')";
        
        // Ejecuta el Query
        if (oConn.FnBoolQueryExecuteUpdate(strSqlStmt))
        {    
           // Elimina el Role Proceso asociado
           subDeleteRoleProcesos();
           
           // Ejecuta Inserción
           if (fnBoolInsertaRoleProcesos())
           {
               oConn.SubCommit();
               // Mensaje
               oFunc.SubSistemaMensaje("Se ha realizado Insert con Éxito");
           }
           else
               oConn.SubRollBack();
            
           
        }
        else
            // realiza el rollback
            oConn.SubRollBack();
    }
    
    // Procedimiento para realizar Update
    private void SubUpdateUser()
    {
        // TODO add your handling code here:
        String strSqlStmt;
        String sPass;
        
        
        // Coloca la transacción a true
        oConn.SubAutoCommit(false);
        
        // Quita encriptamiento al password
        sPass = new String(txpPassword.getPassword());
    
    
        // Prepara el Query
        strSqlStmt  = " Update tblusers ";
        strSqlStmt += " Set strUserPass='"+sPass.toString()+"', ";
        strSqlStmt += "     strUserName='"+txtName.getText().toString()+"', ";
        strSqlStmt += "     strRoleName='"+txtRole.getText().toString()+"' ";
        strSqlStmt += " Where strUserIde='"+txtClave.getText().toString()+"' ";

        // Ejecuta el Query
        if (oConn.FnBoolQueryExecuteUpdate(strSqlStmt))
        {    
           // Elimina el Role Proceso asociado
           subDeleteRoleProcesos();
           
           // Ejecuta Inserción
           if (fnBoolInsertaRoleProcesos())
           {
               oConn.SubCommit();
               // Mensaje
               oFunc.SubSistemaMensaje("Se ha realizado Update con Éxito");           
           }
           else
               oConn.SubRollBack();
            
          
        }
        else
            // realiza el rollback
            oConn.SubRollBack();
        
    }
    
    
    // Procedimiento pra Eliminar un Usuario
    private void SubDeleteUser()
    {
        
        // TODO add your handling code here:
        String strSqlStmt;
    
        // Prepara el Query
        strSqlStmt  = " Delete from tblusers ";
        strSqlStmt += " Where strUserIde='"+txtClave.getText().toString()+"' ";

        // Ejecuta el Query
        if (oConn.FnBoolQueryExecuteUpdate(strSqlStmt))
        {    
           // Mensaje
           oFunc.SubSistemaMensaje("Se ha realizado Delete con Éxito");
        }
       
    }
    
    private boolean fnBoolDatosOk()
    {
        
        // Variable para el Mensaje
        String sMessage="";
        String sPass="";
        String sRePass="";
        
        // Valida el
        if (txpPassword.getPassword().length==0)
        {
            // Añade el Usuario al Mensaje
            sMessage = "Password";
            
            // Coloca el Foco en el Objeto
            txpPassword.requestFocus();
        }
        
        // Quito encriptamiento a los passwords
        sPass = new String(txpPassword.getPassword());
        sRePass =new String(txpRePassword.getPassword());
        
        // Valida el Password
        if ( ! sPass.equals(sRePass) )
        {
            // Valida si no falló con el usuario para mandar el foco
            if (sMessage.length()==0)
                
                // Mando el Foco al Password si no ha fallado algun dato previo
                txpPassword.requestFocus();
            
            // Añade el Usuario al Mensaje
            sMessage = sMessage+"\n"+"Re Password";
        }

        
        // Valida el Nombre
        if (txtName.getText().length()<=0)
        {
            // Valida si no falló con el usuario para mandar el foco
            if (sMessage.length()==0)
                
                // Mando el Foco al Password si no ha fallado algun dato previo
                txtName.requestFocus();
            
            // Añade el Usuario al Mensaje
            sMessage = sMessage+"\n"+"El Nombre";
        }

        // Valida el Role
        if (txtRole.getText().length()<=0)
        {
            // Valida si no falló con el usuario para mandar el foco
            if (sMessage.length()==0)
                
                // Mando el Foco al Password si no ha fallado algun dato previo
                txtRole.requestFocus();
            
            // Añade el Usuario al Mensaje
            sMessage = sMessage+"\n"+"El role";
        }
        
        // Valida los procesos seleccionados
        if (lstProcesos.isSelectionEmpty())
        {
            // Añade el Usuario al Mensaje
            sMessage = sMessage+"\n"+"Debe Seleccionar un Proceso";
        }
        
        // Verifica si hay que desplegar el Mensaje
        if (sMessage.length() > 0)
        {
            //Prepara el Mensaje
            sMessage = "Debe de Capturar los siguiente datos:\n"+sMessage;
            JOptionPane.showMessageDialog(null, sMessage);
            
            // Devuelve falso
            return false;
        }
        else
        {
            // Retorna Correcto
            return true;    
        }
        
       
    }
    
    
    private void subDeleteRoleProcesos()
    {
        
        // Variable para el Query
        String sQuery;
        Boolean bResult=false;
        
        // Prepara el Query para Eliminar
        sQuery ="Delete from tblroleprocesos";        
        sQuery = sQuery + " Where strRoleName='"+txtRole.getText().toString()+"'";
        
        // Ejecuta el Query para Borrar
        oConn.FnBoolQueryExecuteUpdate(sQuery);
        
        
    }
    
      private boolean fnBoolInsertaRoleProcesos()
    {
        int iPosicion;
        String sElemento; 
        String sQuery;
        boolean bResult=true;
        
        for (iPosicion = 0; iPosicion < lstProcesos.getModel().getSize();iPosicion++)
        {
            // Obtiene el Elemento de la lista
            sElemento = lstProcesos.getModel().getElementAt(iPosicion).toString();
            sElemento = sElemento.substring(0,10);                       
            
            // Verifica si esta seleccionado
            if (lstProcesos.isSelectedIndex(iPosicion))
            {
                // Prepara Query para Insersion
                sQuery = "Insert into tblroleprocesos ";
                sQuery = sQuery + " (strRoleName,strProcesoIde) ";
                sQuery = sQuery + " value ('"+txtRole.getText().toString()+"','"+sElemento+"')";
                
                // Ejecuta Inserción
                if (! oConn.FnBoolQueryExecuteUpdate(sQuery))
                    bResult = false;
            }
            
        }
        
        // Retorna
        return (bResult);
    }
    
    
   
    
    
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /*
         * Set the Nimbus look and feel
         */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /*
         * If Nimbus (introduced in Java SE 6) is not available, stay with the
         * default look and feel. For details see
         * http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(frmUsuarios.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(frmUsuarios.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(frmUsuarios.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(frmUsuarios.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /*
         * Create and display the dialog
         */
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                frmUsuarios dialog = new frmUsuarios(new javax.swing.JFrame(), true);
                dialog.addWindowListener(new java.awt.event.WindowAdapter() {

                    @Override
                    public void windowClosing(java.awt.event.WindowEvent e) {
                        System.exit(0);
                    }
                });
                dialog.setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnAceptar;
    private javax.swing.JButton btnBorrar;
    private javax.swing.JButton btnCancelar;
    private javax.swing.JButton btnInsertar;
    private javax.swing.JButton btnModificar;
    private java.awt.Choice choClaves;
    private java.awt.Choice choRoles;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JLabel lblName;
    private javax.swing.JLabel lblPassword;
    private javax.swing.JLabel lblPassword2;
    private javax.swing.JLabel lblRole;
    private javax.swing.JLabel lblUser;
    private javax.swing.JList lstProcesos;
    private javax.swing.JPanel pnlClave;
    private javax.swing.JPanel pnlOperaciones;
    private javax.swing.JPanel pnlTransacciones;
    private javax.swing.JPasswordField txpPassword;
    private javax.swing.JPasswordField txpRePassword;
    private javax.swing.JTextField txtClave;
    private javax.swing.JTextField txtName;
    private javax.swing.JTextField txtRole;
    // End of variables declaration//GEN-END:variables
}
